//引入axios
import axios from 'axios';
let cancel;
let promiseArr = {};
const CancelToken = axios.CancelToken;
// axios.defaults.baseURL = 'http://192.168.140.165:8080/Thingworx/Things/MAC2000/Services';
//设置默认请求头
axios.defaults.headers = {
    "X-XSRF-TOKEN": "TWX-XSRF-TOKEN-VALUE",
    'appKey': '3d323db7-26a5-4d66-9e2d-ba770ab64b8a',
}
// 请求拦截器
axios.interceptors.request.use(config => {

    // 请求前加入token验证；
    // config.headers['token'] = Vue.cookie.get('token') ? Vue.cookie.get('token') : '74c8ffe4a59da108f03aa7afc77cc24e';
    // 发起请求时，取消掉当前正在进行的相同请求
    config.params = {
        "Accept": "application/json",
        'Content-Type': 'application/json'
    };
    if (promiseArr[config.url]) {
        promiseArr[config.url]('操作取消')
        promiseArr[config.url] = cancel
    } else {
        promiseArr[config.url] = cancel
    }
    return config
}, error => {
    return Promise.reject(error)
})

// 响应拦截器即异常处理
axios.interceptors.response.use(response => {
    return response
}, err => {
    if (err && err.response) {
        switch (err.response.status) {
            case 400:
                err.message = '错误请求'
                break;
            case 401:
                err.message = '未授权，请重新登录'
                break;
            case 403:
                err.message = '拒绝访问'
                break;
            case 404:
                err.message = '请求错误,未找到该资源'
                break;
            case 405:
                err.message = '请求方法未允许'
                break;
            case 408:
                err.message = '请求超时'
                break;
            case 500:
                err.message = '服务器端出错'
                break;
            case 501:
                err.message = '网络未实现'
                break;
            case 502:
                err.message = '网络错误'
                break;
            case 503:
                err.message = '服务不可用'
                break;
            case 504:
                err.message = '网络超时'
                break;
            case 505:
                err.message = 'http版本不支持该请求'
                break;
            default:
                err.message = `连接错误${err.response.status}`
        }
    } else {
        err.message = "连接到服务器失败"
    }
    message.err(err.message)
    return Promise.resolve(err.response)
})

axios.defaults.timeout = 10000

export default {
    //get请求
    get(url, param) {
        return new Promise((resolve, reject) => {
            axios({
                method: 'get',
                url,
                params: param,
                cancelToken: new CancelToken(c => {
                    cancel = c
                })
            }).then(res => {
                resolve(res.data)
            }).catch(err => {
                reject(err)
            })
        })
    },
    //post请求
    post(url, param) {
        return new Promise((resolve, reject) => {
            axios({
                method: 'post',
                url,
                data: param ? param : {},
                cancelToken: new CancelToken(c => {
                    cancel = c
                })
            }).then(res => {
                resolve(res)
            })
        })
    },
    //put请求
    put(url, param) {
        return new Promise((resolve, reject) => {
            axios({
                method: 'put',
                url,
                data: param ? param : {},
                cancelToken: new CancelToken(c => {
                    cancel = c
                })
            }).then(res => {
                resolve(res)
            })
        })
    },
    //delete
    delete(url, param) {
        return new Promise((resolve, reject) => {
            axios({
                method: 'delete',
                url,
                data: param ? param : {},
                cancelToken: new CancelToken(c => {
                    cancel = c
                })
            }).then(res => {
                resolve(res)
            })
        })
    }
}
